//
//  XUIGroupTableView.h
//  etionUI
//
//  Created by wjxfhxy on 15/12/24.
//  Copyright (c) 2015年 GuangZhouXuanWu. All rights reserved.
//

#import "XUITableView.h"

typedef NS_ENUM(NSInteger, XUIGroupTableViewRowAnimation) {
    XUIGroupTableViewRowAnimationFade,
    XUIGroupTableViewRowAnimationRight,
    XUIGroupTableViewRowAnimationLeft,
    XUIGroupTableViewRowAnimationTop,
    XUIGroupTableViewRowAnimationBottom,
    XUIGroupTableViewRowAnimationNone
};

@class XUIGroupTableView;

//@class XUIGroupTableViewHeaderView;

@class XUIGroupTableViewCell;

@protocol XUIGroupTableViewDelegate <NSObject>

-(CGFloat)groupTableView:(XUIGroupTableView *)groupTableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;

@optional

-(CGFloat)groupTableView:(XUIGroupTableView *)groupTableView heightForHeaderInGroup:(NSInteger)group;

-(UIView*)groupTableView:(XUIGroupTableView *)groupTableView viewForHeaderInGroup:(NSInteger)group;

-(UIEdgeInsets)groupTableView:(XUIGroupTableView *)groupTableView setSeparatorInsetForRowAtIndexPath:(NSIndexPath *)indexPath;

-(void)groupTableView:(XUIGroupTableView *)groupTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

-(NSIndexPath*)groupTableView:(XUIGroupTableView *)XUIGroupTableView findIndexPathWithTag:(NSString *)tag;

-(BOOL)groupTableView:(XUIGroupTableView *)XUIGroupTableView hiddenHeaderSeparateLineInGroup:(NSInteger)group;

-(UITableViewCellEditingStyle)groupTableView:(XUIGroupTableView *)groupTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

//drag
-(void)groupTableViewWillBeginDragging:(XUIGroupTableView *)groupTableView;

@end

@protocol XUIGroupTableViewDataSource <NSObject>

-(NSUInteger)numberOfGroupsInGroupTableView:(XUIGroupTableView *)groupTableView;

-(NSUInteger)groupTableView:(XUIGroupTableView *)groupTableView numberOfRowsInGroup:(NSInteger)group;

-(XUIGroupTableViewCell*)groupTableView:(XUIGroupTableView *)groupTableView cellForRowAtIndexPath:(NSIndexPath*)indexPath;

@optional

-(BOOL)groupTableView:(XUIGroupTableView *)groupTableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;

-(void)groupTableView:(XUIGroupTableView *)groupTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

@end

@interface XUIGroupTableViewHeaderView : XUITableViewCell

@end

@interface XUIGroupTableViewCell : XUITableViewCell

-(instancetype)init;

@end

@interface XUIGroupTableView : UIView

@property(nonatomic,assign) id<XUIGroupTableViewDataSource> dataSource;
@property(nonatomic,assign) id<XUIGroupTableViewDelegate> delegate;

@property(nonatomic,assign) UIEdgeInsets contentInset;

@property(nonatomic,assign) BOOL showsVerticalScrollIndicator;

@property(nonatomic,readonly,retain) NSArray *allCells;

@property(nonatomic,assign) BOOL scrollEnabled;

@property(nonatomic,assign) CGSize contentSize;

@property(nonatomic,readonly) BOOL tracking;
@property(nonatomic,readonly) BOOL dragging;
@property(nonatomic,readonly) BOOL decelerating;

-(void)reloadData;

-(void)insertRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(XUIGroupTableViewRowAnimation)animation;

-(void)deleteRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(XUIGroupTableViewRowAnimation)animation;

-(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(XUIGroupTableViewRowAnimation)animation;

-(void)reloadSections:(NSIndexSet *)sections withRowAnimation:(XUIGroupTableViewRowAnimation)animation;

-(void)beginUpdates;

-(void)endUpdates;

-(XUIGroupTableViewCell*)cellWithTag:(NSString*)tag;

-(XUIGroupTableViewCell*)cellAtIndexPath:(NSIndexPath*)indexPath;

-(NSIndexPath*)indexPathOfCell:(XUIGroupTableViewCell*)cell;

-(void)scrollToIndexPath:(NSIndexPath*)indexPath animated:(BOOL)animated;

-(void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;

-(XUITableView*)getTableView;

@end
